/**
 * 文件名：@PatternValidator.java <br/>
 * 包名：cn.efunbox.afw.core.validation <br/>
 * 项目名：afw-core <br/>
 * @author xtwin <br/>
 */
package cn.efunbox.afw.core.validation;

import cn.efunbox.afw.core.exception.SystemException;
import cn.efunbox.afw.core.exception.ValidationException;
import cn.efunbox.afw.core.mvc.context.Context;

/**
 * 类名：PatternValidator  <br />
 *
 * 功能：基于正则表达式的校验器
 *
 * @author xtwin <br />
 * 创建时间：2015年12月2日 下午3:44:59  <br />
 * @version 2015年12月2日
 */
public class PatternValidator extends AbstractValidator {

	/**
	 * 构造方法
	 */
	public PatternValidator() {
		super("validation.error.pattern");
	}

	/**
	 * 功能: <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2015年12月2日 下午3:45:24<br/>
	 * 
	 * @param field
	 * @param value
	 * @param message
	 * @param config
	 * @throws Exception <br/>
	 * @see cn.efunbox.afw.core.validation.AbstractValidator#doValidate(cn.efunbox.afw.core.mvc.context.Context, java.lang.String, java.lang.Object, java.lang.String, java.lang.Object)
	 */
	@Override
	protected void doValidate(Context context, String field, Object value, String message, Object config) throws Exception {
		if (null == config) {
			throw new SystemException("system.error.config.is.empty");
		}
		
		if (null != value) {
			if (! (value instanceof String)) {
				throw new SystemException("system.error.type.is.not.support", new Object[] { value.getClass().getName() });
			}
			
			if (! ((String) value).matches((String) config)) {
				if (null != code) {
					throw new ValidationException(null != message ? message : this.message, code, new Object[] { field });
				} else {
					throw new ValidationException(null != message ? message : this.message, new Object[] { field });
				}
			}
		}
	}
}
